import { processStart, processInstance } from '@/services/bpmn'
import { putAction } from '@/services/manage'
import { CURY_TYPE } from '@/store/mutation-types'
export default {
  methods: {
    async handleFlowDetail(row) { // 查看流程审批进度
      // 根据流程实例id获取流程信息--begin
      const res = await processInstance(row.processInstanceId)
      if (res.success) {
        const taskData = res.result
        taskData.processInstanceId = taskData.id
        this.$refs.taskModal.show(taskData)
      }
      // 根据流程实例id获取流程信息--end
    },
    /**
     * 点击发起
     * @param {*} row 业务单数据
     * @param {*} key 业务单主键
     * @param  flowData 业务单存储在流程中的数据，后续流程表达式可直接使用,流程不使用业务单数据时，可不传
     * @returns
     */
    async handleFlowStart(row, key = 'id', flowData = {}) {
      try {
        // 发起前后事件处理 需要阻止继续执行 需要返回异步Promise new Promise((resolve, reject)=>{ })
        if (typeof this.flowStartBefore === 'function') await this.flowStartBefore()
        this.$confirm({
          title: '确认提交',
          content: '是否提交选中数据?',
          cancelText: '取消',
          okText: '确定',
          onOk: () => {
            this.flowStart(row, key, flowData)
          }
        })
      } catch (error) {
        console.log(error)
      }
    },
    async flowStart(row, key = 'id', flowData = {}) { // 发起流程
      this.closeMessage = this.$message.loading('发起中..', 0)
      try {
        // 流程发起 -begin
        const res = await processStart(this.bpmnCode, { // 1、bpmnCode为配置的流程编码 2、row.id 为行数据主键
          businessKey: row[key],
          ...flowData // 若流程实例中不使用业务单数据时，该数据可不传
        })
        if (!res.success) {
          return this.$message.warning(res.message)
        }
        // 流程发起 ---end

        if (typeof this.flowStartAfter === 'function') { // 自定义流程发起成功后业务单更新
          await this.flowStartAfter(res)
        } else {
          // 更新业务表审批状态及流程实例ID -begin
          row.bpmnStatus = '02' // 更新行数据状态
          row.processInstanceId = res.result // 更新行数据审批实例id
          row.crudType = CURY_TYPE.UPDATE // 更新行数据脏数据状态
          const res2 = await putAction(this.url.save, row)
          if (res2.success) {
            this.$message.success('操作成功')
            this.loadData()
          } else {
            this.$message.warning(res2.message)
          }
          // 更新业务表审批状态及流程实例ID -end
        }
        this.closeMessage()
      } catch (error) {
        this.closeMessage()
      }
    }
  }
}
